package com.ic.base;

import java.util.List;

/**
 * 本接口为Mybatis持久层提供了基础增、删、改、查功能
 * 实现本接口方法为： public interface DaoAssessDao extends BaseDao<DocAssess>{}
 * 如果DaoAssessDao不需要本接口中定义的方法，在对应的.xml文件不配置
 *
 * @param <T>
 * @author huzenan
 */
public interface BaseDao<T> {
	/**
	 * 新增方法
	 *
	 * @param t t为泛型变量，该参数为所需添加对象的实例
	 * @return (1) SQL 数据操作语言 (DML) 语句的行数
	 * (2) 对于无返回内容的 SQL 语句，返回 0
	 */
	Integer insert(T t);

	/**
	 * 新增方法，将t中的非空字段添加至数据库
	 *
	 * @param t t为泛型变量，该参数为所需添加对象的实例
	 * @return (1) SQL 数据操作语言 (DML) 语句的行数
	 * (2) 对于无返回内容的 SQL 语句，返回 0
	 */
	Integer insertSelective(T t);

	/**
	 * 修改方法，根据主键进行数据更新
	 *
	 * @param t t为泛型变量，该参数为所需修改对象的实例
	 * @return (1) SQL 数据操作语言 (DML) 语句的行数
	 * (2) 对于无返回内容的 SQL 语句，返回 0
	 */
	Integer updateByPrimaryKey(T t);

	/**
	 * 修改方法，根据主键更新t中的非空字段
	 *
	 * @param t t为泛型变量，该参数为所需修改对象的实例
	 * @return (1) SQL 数据操作语言 (DML) 语句的行数
	 * (2) 对于无返回内容的 SQL 语句，返回 0
	 */
	Integer updateByPrimaryKeySelective(T t);

	/**
	 * 基于数字主键的删除方法
	 *
	 * @param id id为表的主键
	 * @return (1) SQL 数据操作语言 (DML) 语句的行数
	 * (2) 对于无返回内容的 SQL 语句，返回 0
	 */
	Integer deleteByPrimaryKey(Integer id);

	/**
	 * 基于字符串主键的删除方法
	 *
	 * @param id id为表的主键
	 * @return (1) SQL 数据操作语言 (DML) 语句的行数
	 * (2) 对于无返回内容的 SQL 语句，返回 0
	 */
	Integer deleteByPrimaryKey(String id);

	/**
	 * 基于数字主键的查询方法
	 *
	 * @param id id为表的主键
	 * @return 查询结果集
	 */
	T selectByPrimaryKey(Integer id);

	/**
	 * 基于字符串主键的查询方法
	 *
	 * @param id id为表的主键
	 * @return 查询结果集
	 */
	T selectByPrimaryKey(String id);

	/**
	 * 基于分页信息的查询方法
	 *
	 * @param pageInfo 分页信息
	 * @return 查询结果集
	 */
	List<T> selectByPageInfo(PageInfo pageInfo);
}
